package cn.edu.sgu.www.mhxysy.service.waiguan;

import cn.edu.sgu.www.mhxysy.dto.waiguan.ShizhuangCategoryDTO;
import cn.edu.sgu.www.mhxysy.dto.waiguan.ShizhuangCategoryInsertBatchDTO;
import cn.edu.sgu.www.mhxysy.entity.waiguan.ShizhuangCategory;
import cn.edu.sgu.www.mhxysy.pager.waiguan.ShizhuangCategoryPager;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * @author 沐雨橙风ιε
 * @version 1.0
 */
public interface ShizhuangCategoryService {

    /**
     * 上传图片
     * @param file MultipartFile
     * @return String
     * @throws IOException uploadUtils.upload()方法抛出的异常
     */
    String upload(MultipartFile file) throws IOException;

    /**
     * 添加时装
     * @param shizhuangCategoryDTO 时装类型信息
     */
    void insert(ShizhuangCategoryDTO shizhuangCategoryDTO);

    /**
     * 批量添加时装类型
     * @param insertBatchDTO 时装类型信息
     */
    @Transactional(rollbackFor = Exception.class)
    void insertBatch(ShizhuangCategoryInsertBatchDTO insertBatchDTO);

    /**
     * 通过ID删除时装类型
     * @param id 时装类型ID
     */
    void deleteById(Integer id);

    /**
     * 通过ID修改时装信息
     * @param shizhuangCategoryDTO 时装类型信息
     */
    void updateById(ShizhuangCategoryDTO shizhuangCategoryDTO);

    /**
     * 通过ID修改时装图片
     * @param id 时装类型ID
     * @param image 图片地址
     */
    void updateImageById(Integer id, String image);

    /**
     * 查询全部时装类型
     * @return List<ShizhuangCategory>
     */
    List<ShizhuangCategory> selectAll();

    /**
     * 查询父级时装类型
     * @return List<ShizhuangCategory>
     */
    List<ShizhuangCategory> selectParent();

    /**
     * 通过ID查询时装
     * @param id 时装类型ID
     * @return ShizhuangCategory
     */
    ShizhuangCategory selectById(Integer id);

    /**
     * 通过性别查询时装类型列表
     * @param gender 性别
     * @return List<ShizhuangCategory>
     */
    List<ShizhuangCategory> selectList(Integer gender);

    /**
     * 通过父级类型ID查询时装类型列表
     * @param parentId 分页参数
     * @return List<ShizhuangCategory>
     */
    List<ShizhuangCategory> selectByParentId(Integer parentId);

    /**
     * 分页查询时装类型列表
     * @param pager 分页参数
     * @return Page<ShizhuangCategory>
     */
    Page<ShizhuangCategory> selectByPage(ShizhuangCategoryPager pager);
}